home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / s390 / include / asm / dasd.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  10.8 KB  |  284 lines

  1. /* 
  2.  * File...........: linux/drivers/s390/block/dasd.c
  3.  * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com>
  4.  * Bugreports.to..: <Linux390@de.ibm.com>
  5.  * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000
  6.  * EMC Symmetrix ioctl Copyright EMC Corporation, 2008
  7.  * Author.........: Nigel Hislop <hislop_nigel@emc.com>
  8.  *
  9.  * This file is the interface of the DASD device driver, which is exported to user space
  10.  * any future changes wrt the API will result in a change of the APIVERSION reported
  11.  * to userspace by the DASDAPIVER-ioctl
  12.  *
  13.  */
  14.  
  15. #ifndef DASD_H
  16. #define DASD_H
  17. #include <linux/ioctl.h>
  18.  
  19. #define DASD_IOCTL_LETTER 'D'
  20.  
  21. #define DASD_API_VERSION 6
  22.  
  23. /* 
  24.  * struct dasd_information2_t
  25.  * represents any data about the device, which is visible to userspace.
  26.  *  including foramt and featueres.
  27.  */
  28. typedef struct dasd_information2_t {
  29.         unsigned int devno;         /* S/390 devno */
  30.         unsigned int real_devno;    /* for aliases */
  31.         unsigned int schid;         /* S/390 subchannel identifier */
  32.         unsigned int cu_type  : 16; /* from SenseID */
  33.         unsigned int cu_model :  8; /* from SenseID */
  34.         unsigned int dev_type : 16; /* from SenseID */
  35.         unsigned int dev_model : 8; /* from SenseID */
  36.         unsigned int open_count; 
  37.         unsigned int req_queue_len; 
  38.         unsigned int chanq_len;     /* length of chanq */
  39.         char type[4];               /* from discipline.name, 'none' for unknown */
  40.         unsigned int status;        /* current device level */
  41.         unsigned int label_block;   /* where to find the VOLSER */
  42.         unsigned int FBA_layout;    /* fixed block size (like AIXVOL) */
  43.         unsigned int characteristics_size;
  44.         unsigned int confdata_size;
  45.         char characteristics[64];   /* from read_device_characteristics */
  46.         char configuration_data[256]; /* from read_configuration_data */
  47.         unsigned int format;          /* format info like formatted/cdl/ldl/... */
  48.         unsigned int features;        /* dasd features like 'ro',...            */
  49.         unsigned int reserved0;       /* reserved for further use ,...          */
  50.         unsigned int reserved1;       /* reserved for further use ,...          */
  51.         unsigned int reserved2;       /* reserved for further use ,...          */
  52.         unsigned int reserved3;       /* reserved for further use ,...          */
  53.         unsigned int reserved4;       /* reserved for further use ,...          */
  54.         unsigned int reserved5;       /* reserved for further use ,...          */
  55.         unsigned int reserved6;       /* reserved for further use ,...          */
  56.         unsigned int reserved7;       /* reserved for further use ,...          */
  57. } dasd_information2_t;
  58.  
  59. /*
  60.  * values to be used for dasd_information_t.format
  61.  * 0x00: NOT formatted
  62.  * 0x01: Linux disc layout
  63.  * 0x02: Common disc layout
  64.  */
  65. #define DASD_FORMAT_NONE 0
  66. #define DASD_FORMAT_LDL  1
  67. #define DASD_FORMAT_CDL  2
  68. /*
  69.  * values to be used for dasd_information_t.features
  70.  * 0x00: default features
  71.  * 0x01: readonly (ro)
  72.  * 0x02: use diag discipline (diag)
  73.  * 0x04: set the device initially online (internal use only)
  74.  * 0x08: enable ERP related logging
  75.  */
  76. #define DASD_FEATURE_DEFAULT         0x00
  77. #define DASD_FEATURE_READONLY         0x01
  78. #define DASD_FEATURE_USEDIAG         0x02
  79. #define DASD_FEATURE_INITIAL_ONLINE  0x04
  80. #define DASD_FEATURE_ERPLOG         0x08
  81.  
  82. #define DASD_PARTN_BITS 2
  83.  
  84. /* 
  85.  * struct dasd_information_t
  86.  * represents any data about the data, which is visible to userspace
  87.  */
  88. typedef struct dasd_information_t {
  89.         unsigned int devno;         /* S/390 devno */
  90.         unsigned int real_devno;    /* for aliases */
  91.         unsigned int schid;         /* S/390 subchannel identifier */
  92.         unsigned int cu_type  : 16; /* from SenseID */
  93.         unsigned int cu_model :  8; /* from SenseID */
  94.         unsigned int dev_type : 16; /* from SenseID */
  95.         unsigned int dev_model : 8; /* from SenseID */
  96.         unsigned int open_count; 
  97.         unsigned int req_queue_len; 
  98.         unsigned int chanq_len;     /* length of chanq */
  99.         char type[4];               /* from discipline.name, 'none' for unknown */
  100.         unsigned int status;        /* current device level */
  101.         unsigned int label_block;   /* where to find the VOLSER */
  102.         unsigned int FBA_layout;    /* fixed block size (like AIXVOL) */
  103.         unsigned int characteristics_size;
  104.         unsigned int confdata_size;
  105.         char characteristics[64];   /* from read_device_characteristics */
  106.         char configuration_data[256]; /* from read_configuration_data */
  107. } dasd_information_t;
  108.  
  109. /*
  110.  * Read Subsystem Data - Performance Statistics
  111.  */ 
  112. typedef struct dasd_rssd_perf_stats_t {
  113.     unsigned char  invalid:1;
  114.     unsigned char  format:3;
  115.     unsigned char  data_format:4;
  116.     unsigned char  unit_address;
  117.     unsigned short device_status;
  118.     unsigned int   nr_read_normal;
  119.     unsigned int   nr_read_normal_hits;
  120.     unsigned int   nr_write_normal;
  121.     unsigned int   nr_write_fast_normal_hits;
  122.     unsigned int   nr_read_seq;
  123.     unsigned int   nr_read_seq_hits;
  124.     unsigned int   nr_write_seq;
  125.     unsigned int   nr_write_fast_seq_hits;
  126.     unsigned int   nr_read_cache;
  127.     unsigned int   nr_read_cache_hits;
  128.     unsigned int   nr_write_cache;
  129.     unsigned int   nr_write_fast_cache_hits;
  130.     unsigned int   nr_inhibit_cache;
  131.     unsigned int   nr_bybass_cache;
  132.     unsigned int   nr_seq_dasd_to_cache;
  133.     unsigned int   nr_dasd_to_cache;
  134.     unsigned int   nr_cache_to_dasd;
  135.     unsigned int   nr_delayed_fast_write;
  136.     unsigned int   nr_normal_fast_write;
  137.     unsigned int   nr_seq_fast_write;
  138.     unsigned int   nr_cache_miss;
  139.     unsigned char  status2;
  140.     unsigned int   nr_quick_write_promotes;
  141.     unsigned char  reserved;
  142.     unsigned short ssid;
  143.     unsigned char  reseved2[96];
  144. } __attribute__((packed)) dasd_rssd_perf_stats_t;
  145.  
  146. /* 
  147.  * struct profile_info_t
  148.  * holds the profinling information 
  149.  */
  150. typedef struct dasd_profile_info_t {
  151.         unsigned int dasd_io_reqs;     /* number of requests processed at all */
  152.         unsigned int dasd_io_sects;     /* number of sectors processed at all */
  153.         unsigned int dasd_io_secs[32];     /* histogram of request's sizes */
  154.         unsigned int dasd_io_times[32];     /* histogram of requests's times */
  155.         unsigned int dasd_io_timps[32];     /* histogram of requests's times per sector */
  156.         unsigned int dasd_io_time1[32];     /* histogram of time from build to start */
  157.         unsigned int dasd_io_time2[32];     /* histogram of time from start to irq */
  158.         unsigned int dasd_io_time2ps[32]; /* histogram of time from start to irq */
  159.         unsigned int dasd_io_time3[32];     /* histogram of time from irq to end */
  160.         unsigned int dasd_io_nr_req[32]; /* histogram of # of requests in chanq */
  161. } dasd_profile_info_t;
  162.  
  163. /* 
  164.  * struct format_data_t
  165.  * represents all data necessary to format a dasd
  166.  */
  167. typedef struct format_data_t {
  168.     int start_unit; /* from track */
  169.     int stop_unit;  /* to track */
  170.     int blksize;    /* sectorsize */
  171.         int intensity;  
  172. } format_data_t;
  173.  
  174. /*
  175.  * values to be used for format_data_t.intensity
  176.  * 0/8: normal format
  177.  * 1/9: also write record zero
  178.  * 3/11: also write home address
  179.  * 4/12: invalidate track
  180.  */
  181. #define DASD_FMT_INT_FMT_R0 1 /* write record zero */
  182. #define DASD_FMT_INT_FMT_HA 2 /* write home address, also set FMT_R0 ! */
  183. #define DASD_FMT_INT_INVAL  4 /* invalidate tracks */
  184. #define DASD_FMT_INT_COMPAT 8 /* use OS/390 compatible disk layout */
  185.  
  186.  
  187. /* 
  188.  * struct attrib_data_t
  189.  * represents the operation (cache) bits for the device.
  190.  * Used in DE to influence caching of the DASD.
  191.  */
  192. typedef struct attrib_data_t {
  193.     unsigned char operation:3;     /* cache operation mode */
  194.     unsigned char reserved:5;      /* cache operation mode */
  195.     __u16         nr_cyl;          /* no of cyliners for read ahaed */
  196.     __u8          reserved2[29];   /* for future use */
  197. } __attribute__ ((packed)) attrib_data_t;
  198.  
  199. /* definition of operation (cache) bits within attributes of DE */
  200. #define DASD_NORMAL_CACHE  0x0
  201. #define DASD_BYPASS_CACHE  0x1
  202. #define DASD_INHIBIT_LOAD  0x2
  203. #define DASD_SEQ_ACCESS    0x3
  204. #define DASD_SEQ_PRESTAGE  0x4
  205. #define DASD_REC_ACCESS    0x5
  206.  
  207. /*
  208.  * Perform EMC Symmetrix I/O
  209.  */
  210. typedef struct dasd_symmio_parms {
  211.     unsigned char reserved[8];    /* compat with older releases */
  212.     unsigned long long psf_data;    /* char * cast to u64 */
  213.     unsigned long long rssd_result; /* char * cast to u64 */
  214.     int psf_data_len;
  215.     int rssd_result_len;
  216. } __attribute__ ((packed)) dasd_symmio_parms_t;
  217.  
  218. /********************************************************************************
  219.  * SECTION: Definition of IOCTLs
  220.  *
  221.  * Here ist how the ioctl-nr should be used:
  222.  *    0 -   31   DASD driver itself
  223.  *   32 -  239   still open
  224.  *  240 -  255   reserved for EMC 
  225.  *******************************************************************************/
  226.  
  227. /* Disable the volume (for Linux) */
  228. #define BIODASDDISABLE _IO(DASD_IOCTL_LETTER,0) 
  229. /* Enable the volume (for Linux) */
  230. #define BIODASDENABLE  _IO(DASD_IOCTL_LETTER,1)  
  231. /* Issue a reserve/release command, rsp. */
  232. #define BIODASDRSRV    _IO(DASD_IOCTL_LETTER,2) /* reserve */
  233. #define BIODASDRLSE    _IO(DASD_IOCTL_LETTER,3) /* release */
  234. #define BIODASDSLCK    _IO(DASD_IOCTL_LETTER,4) /* steal lock */
  235. /* reset profiling information of a device */
  236. #define BIODASDPRRST   _IO(DASD_IOCTL_LETTER,5)
  237. /* Quiesce IO on device */
  238. #define BIODASDQUIESCE _IO(DASD_IOCTL_LETTER,6) 
  239. /* Resume IO on device */
  240. #define BIODASDRESUME  _IO(DASD_IOCTL_LETTER,7) 
  241.  
  242.  
  243. /* retrieve API version number */
  244. #define DASDAPIVER     _IOR(DASD_IOCTL_LETTER,0,int)
  245. /* Get information on a dasd device */
  246. #define BIODASDINFO    _IOR(DASD_IOCTL_LETTER,1,dasd_information_t)
  247. /* retrieve profiling information of a device */
  248. #define BIODASDPRRD    _IOR(DASD_IOCTL_LETTER,2,dasd_profile_info_t)
  249. /* Get information on a dasd device (enhanced) */
  250. #define BIODASDINFO2   _IOR(DASD_IOCTL_LETTER,3,dasd_information2_t)
  251. /* Performance Statistics Read */
  252. #define BIODASDPSRD    _IOR(DASD_IOCTL_LETTER,4,dasd_rssd_perf_stats_t)
  253. /* Get Attributes (cache operations) */
  254. #define BIODASDGATTR   _IOR(DASD_IOCTL_LETTER,5,attrib_data_t) 
  255.  
  256.  
  257. /* #define BIODASDFORMAT  _IOW(IOCTL_LETTER,0,format_data_t) , deprecated */
  258. #define BIODASDFMT     _IOW(DASD_IOCTL_LETTER,1,format_data_t) 
  259. /* Set Attributes (cache operations) */
  260. #define BIODASDSATTR   _IOW(DASD_IOCTL_LETTER,2,attrib_data_t) 
  261.  
  262. #define BIODASDSYMMIO  _IOWR(DASD_IOCTL_LETTER, 240, dasd_symmio_parms_t)
  263.  
  264. #endif                /* DASD_H */
  265.  
  266. /*
  267.  * Overrides for Emacs so that we follow Linus's tabbing style.
  268.  * Emacs will notice this stuff at the end of the file and automatically
  269.  * adjust the settings for this buffer only.  This must remain at the end
  270.  * of the file.
  271.  * ---------------------------------------------------------------------------
  272.  * Local variables:
  273.  * c-indent-level: 4 
  274.  * c-brace-imaginary-offset: 0
  275.  * c-brace-offset: -4
  276.  * c-argdecl-indent: 4
  277.  * c-label-offset: -4
  278.  * c-continued-statement-offset: 4
  279.  * c-continued-brace-offset: 0
  280.  * indent-tabs-mode: nil
  281.  * tab-width: 8
  282.  * End:
  283.  */
  284.